home *** CD-ROM | disk | FTP | other *** search
- unit uScriptEditor;
-
- {
- *******************************************************************************
- * Descriptions: Script Editor
- * $Source: /cvsroot/fma/fma/uScriptEditor.pas,v $
- * $Locker: $
- *
- * Todo:
- *
- * Change Log:
- * $Log: uScriptEditor.pas,v $
- * Revision 1.1 2004/05/20 06:38:25 z_stoichev
- * Initial checkin.
- *
- *
- *******************************************************************************
- }
-
- interface
-
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- ExtCtrls, StdCtrls, ComCtrls, Menus, SynEditHighlighter,
- SynEdit, SynMemo, Buttons, SynHighlighterVBScript, aw_SCtrl;
-
- type
- TfrmEditor = class(TFrame)
- DetailsPanel: TPanel;
- Script: TSynMemo;
- MessagesPanel: TPanel;
- MessagesSplitter1: TSplitter;
- Panel1: TPanel;
- SpeedButton1: TSpeedButton;
- MessagesMemo1: TMemo;
- PrecompileTimer1: TTimer;
- SynVBScriptSyn1: TSynVBScriptSyn;
- ScriptControl: TawScriptControl;
- PopupMenu1: TPopupMenu;
- Undo1: TMenuItem;
- N1: TMenuItem;
- Cut1: TMenuItem;
- Copy1: TMenuItem;
- Paste1: TMenuItem;
- Delete1: TMenuItem;
- N2: TMenuItem;
- SelectAll1: TMenuItem;
- N3: TMenuItem;
- SaveChanges1: TMenuItem;
- N4: TMenuItem;
- FindNextError1: TMenuItem;
- ReplaceDialog1: TReplaceDialog;
- N5: TMenuItem;
- Find1: TMenuItem;
- FindNext1: TMenuItem;
- Replace1: TMenuItem;
- OpenDialog1: TOpenDialog;
- LoadFromFile1: TMenuItem;
- procedure ScriptStatusChange(Sender: TObject;
- Changes: TSynStatusChanges);
- procedure SpeedButton1Click(Sender: TObject);
- procedure MessagesSplitter1Moved(Sender: TObject);
- procedure MessagesMemo1Change(Sender: TObject);
- procedure PrecompileTimer1Timer(Sender: TObject);
- procedure ScriptChange(Sender: TObject);
- procedure ScriptReplaceText(Sender: TObject; const ASearch,
- AReplace: String; Line, Column: Integer;
- var Action: TSynReplaceAction);
- procedure ScriptControlError(Sender: TObject; Error: TawScriptError);
- procedure SaveChanges1Click(Sender: TObject);
- procedure PopupMenu1Popup(Sender: TObject);
- procedure FindNextError1Click(Sender: TObject);
- procedure ReplaceDialog1Find(Sender: TObject);
- procedure Find1Click(Sender: TObject);
- procedure FindNext1Click(Sender: TObject);
- procedure Replace1Click(Sender: TObject);
- procedure LoadFromFile1Click(Sender: TObject);
- private
- { Private declarations }
- procedure DoShowCaretInfo;
- function Get_MessagesVisible: boolean;
- procedure Set_MessagesVisible(const Value: boolean);
- public
- { Public declarations }
- procedure Initialize;
- procedure FindReplace(Find,Replace: string; Backwards,WholeWord,ReplaceAll: boolean);
- property MessagesVisible: boolean read Get_MessagesVisible write Set_MessagesVisible;
- end;
-
- implementation
-
- uses Unit1;
-
- {$R *.dfm}
-
- procedure TfrmEditor.DoShowCaretInfo;
- var
- s: string;
- begin
- if DetailsPanel.Visible then begin
- s := Format(' %s: %.5d %s: %.5d %s: %.5d %s: %.7d',
- ['Row',Script.CaretY,'Col',Script.CaretX,'Lines',Script.Lines.Count,'Chars',Length(Script.Text)]);
- if not Script.InsertMode then
- s := s + ' Overwrite';
- s := s + ' [' + Form1.ScriptFilename + ']';
- if Script.Modified then
- s := s + ' *';
- DetailsPanel.Caption := s;
- end;
- end;
-
- function TfrmEditor.Get_MessagesVisible: boolean;
- begin
- Result := MessagesPanel.Visible;
- end;
-
- procedure TfrmEditor.Initialize;
- begin
- ScriptControl.Language := Form1.ScriptControl.Language;
- Script.Modified := False;
- Script.ReadOnly := Form1.ScriptFilename = '';
- if Script.ReadOnly then
- DetailsPanel.Caption := ' Please specify the script file to be used in Options.'
- else
- DoShowCaretInfo;
- PrecompileTimer1.Enabled := True;
- end;
-
- procedure TfrmEditor.ScriptStatusChange(Sender: TObject;
- Changes: TSynStatusChanges);
- begin
- if [scInsertMode, scModified, scCaretX, scCaretY] * Changes <> [] then
- DoShowCaretInfo;
- end;
-
- procedure TfrmEditor.Set_MessagesVisible(const Value: boolean);
- begin
- MessagesPanel.Visible := Value;
- MessagesSplitter1.Visible := Value;
- if Value then
- MessagesSplitter1.Top := MessagesPanel.Top-1
- else
- MessagesMemo1.Lines.Clear;
- Update;
- end;
-
- procedure TfrmEditor.SpeedButton1Click(Sender: TObject);
- begin
- MessagesVisible := False;
- end;
-
- procedure TfrmEditor.MessagesSplitter1Moved(Sender: TObject);
- begin
- if MessagesPanel.Height < MessagesSplitter1.MinSize then
- MessagesPanel.Height := MessagesSplitter1.MinSize;
- end;
-
- procedure TfrmEditor.MessagesMemo1Change(Sender: TObject);
- begin
- MessagesVisible := MessagesMemo1.Lines.Count <> 0;
- end;
-
- procedure TfrmEditor.PrecompileTimer1Timer(Sender: TObject);
- begin
- PrecompileTimer1.Enabled := False;
- try
- ScriptControl.Code.Assign(Script.Lines);
- MessagesVisible := False;
- except
- // silent error here
- end;
- ScriptControl.Code.Clear;
- end;
-
- procedure TfrmEditor.ScriptChange(Sender: TObject);
- begin
- PrecompileTimer1.Enabled := False;
- PrecompileTimer1.Enabled := True;
- end;
-
- procedure TfrmEditor.FindReplace(Find, Replace: string; Backwards,
- WholeWord, ReplaceAll: boolean);
- var
- so: TSynSearchOptions;
- sl: string;
- begin
- sl := Script.SelText;
- so := [];
- if Backwards then so := so + [ssoBackwards];
- if WholeWord then so := so + [ssoWholeWord];
- if (sl <> '') and (AnsiCompareText(Script.SelText,Find) <> 0) then
- so := so + [ssoSelectedOnly];
- if AnsiCompareText(Find,Replace) <> 0 then so := so + [ssoReplace];
- if ReplaceAll then so := so + [ssoReplaceAll];
- if [ssoReplace,ssoReplaceAll] * so <> [] then so := so + [ssoPrompt];
- Script.SearchReplace(Find,Replace,so);
- end;
-
- procedure TfrmEditor.ScriptReplaceText(Sender: TObject; const ASearch,
- AReplace: String; Line, Column: Integer; var Action: TSynReplaceAction);
- begin
- MessageBeep(MB_ICONQUESTION);
- case MessageDlg('Do you want to replace this text?',mtConfirmation,[mbYes,mbNo,mbCancel,mbAll],0) of
- mrYes: Action := raReplace;
- mrNo: Action := raSkip;
- mrCancel: Action := raCancel;
- mrAll: Action := raReplaceAll;
- end;
- end;
-
- procedure TfrmEditor.ScriptControlError(Sender: TObject;
- Error: TawScriptError);
- begin
- if not MessagesVisible then begin
- Script.CaretX := Error.Column+1;
- Script.CaretY := Error.Line;
- end;
- MessagesMemo1.Lines.Text := Format('Error at line %d, col %d:'#13#10'Reason: %s',
- [Error.Line,Error.Column+1,Error.Description]);
- end;
-
- procedure TfrmEditor.SaveChanges1Click(Sender: TObject);
- begin
- Form1.ApplyEditorChanges;
- DetailsPanel.Caption := Format(' %d bytes written',[Length(Script.Text)]);
- end;
-
- procedure TfrmEditor.PopupMenu1Popup(Sender: TObject);
- begin
- SaveChanges1.Enabled := Script.Modified;
- end;
-
- procedure TfrmEditor.FindNextError1Click(Sender: TObject);
- begin
- MessagesVisible := False;
- PrecompileTimer1Timer(PrecompileTimer1);
- end;
-
- procedure TfrmEditor.ReplaceDialog1Find(Sender: TObject);
- var
- Replace: string;
- begin
- if [frReplace,frReplaceAll] * ReplaceDialog1.Options <> [] then
- Replace := ReplaceDialog1.ReplaceText
- else
- Replace := ReplaceDialog1.FindText;
- FindReplace(ReplaceDialog1.FindText,Replace,
- not (frDown in ReplaceDialog1.Options), frWholeWord in ReplaceDialog1.Options,
- frReplaceAll in ReplaceDialog1.Options);
- end;
-
- procedure TfrmEditor.Find1Click(Sender: TObject);
- begin
- if Script.SelText <> '' then begin
- ReplaceDialog1.FindText := Script.SelText;
- ReplaceDialog1.ReplaceText := '';
- end;
- ReplaceDialog1.Execute;
- end;
-
- procedure TfrmEditor.FindNext1Click(Sender: TObject);
- begin
- FindReplace(ReplaceDialog1.FindText,ReplaceDialog1.FindText,
- not (frDown in ReplaceDialog1.Options), frWholeWord in ReplaceDialog1.Options,
- frReplaceAll in ReplaceDialog1.Options);
- end;
-
- procedure TfrmEditor.Replace1Click(Sender: TObject);
- begin
- if Script.SelText <> '' then begin
- ReplaceDialog1.FindText := Script.SelText;
- ReplaceDialog1.ReplaceText := Script.SelText;
- end;
- ReplaceDialog1.Execute;
- end;
-
- procedure TfrmEditor.LoadFromFile1Click(Sender: TObject);
- begin
- if OpenDialog1.Execute then begin
- if Script.Modified then SaveChanges1.Click;
- Script.Lines.LoadFromFile(OpenDialog1.FileName);
- end;
- end;
-
- end.
-